/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Service;

import DB.FichaClinica;
import DB.HibernateUtil;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import java.util.List;
import javax.persistence.RollbackException;
import javax.transaction.HeuristicMixedException;
import javax.transaction.HeuristicRollbackException;
import javax.transaction.SystemException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;
import org.hibernate.Criteria;
/**
 *
 * @author Jacqueline
 */
@WebService()
public class FichaKineWS {
     /**
     * Web service operation
     */
    @WebMethod(operationName = "agregarFichaClinica")
    public Long agregarFichaClinica(@WebParam(name = "paciente") String paciente,
            @WebParam(name = "profesional") String profesional,
            @WebParam(name = "diagnostico") String diagnostico,
            @WebParam(name = "examenes") String examenes,
            @WebParam(name = "patologia") String patologia,
            @WebParam(name = "evaluacionInicial") String evaluacionInicial,
            @WebParam(name = "cancelacion") String cancelacion,
            @WebParam(name = "tratamiento") String tratamiento,
            @WebParam(name = "fechaIngreso") String fechaIngreso,
            @WebParam(name = "activo") boolean activo,
            @WebParam(name = "evaluacionFinal") String evaluacionFinal) {


        DB.FichaClinica ficha = new DB.FichaClinica();
        ficha.setPaciente(paciente);
        ficha.setProfesional(profesional);
        ficha.setDiagnostico(diagnostico);
        ficha.setExamenes(examenes);
        ficha.setPatologia(patologia);
        ficha.setEvaluacionInicial(evaluacionInicial);
        ficha.setCancelacion(cancelacion);
        ficha.setTratamiento(tratamiento);
        ficha.setFechaIngreso(fechaIngreso);
        ficha.setActivo(activo);
        ficha.setEvaluacionFinal(evaluacionFinal);

        ControladorDeObjetos.saveObject(ficha);
        return ficha.getId();
    }
    /**
     * Web service operation
     */
    @WebMethod(operationName = "listarFichasClinicas")
    public List<FichaClinica> listarFichasClinicas() {
        return ControladorDeObjetos.getAllObjectByClassType(FichaClinica.class);
    }

    /**
     * Web service operation
     */
    @WebMethod(operationName = "eliminarFichaClinica")
    public boolean eliminarFichaClinica(@WebParam(name = "Id") Long Id) throws IllegalStateException, SystemException, RollbackException, HeuristicMixedException, HeuristicRollbackException {

       FichaClinica ficha = (FichaClinica) ControladorDeObjetos.loadObjectByLongId(Id, FichaClinica.class);
       ControladorDeObjetos.deleteObject(ficha);
       return true;

    }

    /**
     * Web service operation
     */
    @WebMethod(operationName = "cargarFichaClinica")
    public Object cargarFichaClinica(@WebParam(name = "Id") Long Id) throws RollbackException, IllegalStateException, SystemException, HeuristicMixedException, HeuristicRollbackException {
        return ControladorDeObjetos.loadObjectByLongId(Id, FichaClinica.class);
    }

    /**
     * Web service operation
     */
    @WebMethod(operationName = "modificarFichaClinica")
    public boolean modificarFichaClinica(@WebParam(name = "Id") Long Id,
            @WebParam(name = "paciente") String paciente,
            @WebParam(name = "profesional") String profesional,
            @WebParam(name = "diagnostico") String diagnostico,
            @WebParam(name = "examenes") String examenes,
            @WebParam(name = "patologia") String patologia,
            @WebParam(name = "evaluacionInicial") String evaluacionInicial,
            @WebParam(name = "cancelacion") String cancelacion,
            @WebParam(name = "tratamiento") String tratamiento,
            @WebParam(name = "fechaIngreso") String fechaIngreso,
            @WebParam(name = "activo") boolean activo,
            @WebParam(name = "evaluacionFinal") String evaluacionFinal) throws IllegalStateException, SystemException, RollbackException, HeuristicMixedException, HeuristicRollbackException {

        FichaClinica ficha = (FichaClinica) ControladorDeObjetos.loadObjectByLongId(Id,FichaClinica.class);
        ficha.setPaciente(paciente);
        ficha.setProfesional(profesional);
        ficha.setDiagnostico(diagnostico);
        ficha.setExamenes(examenes);
        ficha.setPatologia(patologia);
        ficha.setEvaluacionInicial(evaluacionInicial);
        ficha.setCancelacion(cancelacion);
        ficha.setTratamiento(tratamiento);
        ficha.setFechaIngreso(fechaIngreso);
        ficha.setActivo(activo);
        ficha.setEvaluacionFinal(evaluacionFinal);

        return ControladorDeObjetos.updateObject(ficha);
    }
    @WebMethod(operationName = "modificarFicha")
    public boolean modificarFicha(@WebParam(name = "FichaClinica")FichaClinica fichaClinica) {
        return ControladorDeObjetos.updateObject(fichaClinica);
    }
    /**
     * Web service operation
     */
    @WebMethod(operationName = "agregarFichaClinicaPapelera")
    public boolean agregarFichaClinicaPapelera(@WebParam(name = "ficha")
    FichaClinica ficha) {
        ControladorDeObjetos.saveObject(ficha);
        return true;
    }

    @WebMethod(operationName = "filtrarFichasKine")
    public List<FichaClinica> filtrarFichasKine(@WebParam(name = "buscar") String buscar) {
        Session s = HibernateUtil.getSessionFactory().getCurrentSession();
        Transaction trans = s.beginTransaction();
        Criteria c = s.createCriteria(FichaClinica.class).add(Restrictions.or(Restrictions.or(Restrictions.ilike("paciente", "%" + buscar+ "%"),
                Restrictions.ilike("diagnostico", "%" + buscar + "%")),
                Restrictions.or(Restrictions.ilike("patologia", "%" + buscar + "%"),
                Restrictions.ilike("tratamiento", "%" + buscar + "%")))
                );
        List l = c.list();
        s.close();
        return l;
    }

}
